package stackdemo;

import java.util.Stack;

//力扣题. 括号匹配
class Solution {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        //1、遍历字符串
        for(int i = 0; i< s.length(); i++) {
            char ch = s.charAt(i);
            //判断是不是左括号，是左括号，放进栈里面
            if(ch == '{' || ch =='[' || ch == '(') {
                stack.push(ch);
            } else {
                //是右括号的情况下
                if(stack.empty()) {
                    //栈为空的情况,即右括号多
                    return false;
                }
                //栈不为空，判断是否匹配
                char ch2 = stack.peek();//ch2为左括号，ch是右括号
                if((ch2 == '{' && ch == '}') || (ch2 == '(' && ch == ')') || (ch2 == '[' && ch == ']')) {
                    //出栈
                    stack.pop();
                } else {
                    //左右括号不匹配
                    return false;
                }
            }
        }
        //字符串遍历完了，栈不为空，即左括号多
        if(!stack.empty()) {
            return false;
        }
        //左右括号不匹配、左括号多、右括号多的情况都不存在，那么就是匹配的
        return true;
    }
}